@juangadm/pre-post 1.4.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/assets/labels/post.png +0 -0
- package/assets/labels/pre.png +0 -0
- package/dist/attach.d.ts +59 -0
- package/dist/attach.d.ts.map +1 -0
- package/dist/attach.js +137 -0
- package/dist/attach.js.map +1 -0
- package/dist/bin/cli.js +20 -0
- package/dist/bin/cli.js.map +1 -1
- package/dist/browser.d.ts +48 -2
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +60 -31
- package/dist/browser.js.map +1 -1
- package/dist/commands/doctor.d.ts +6 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +14 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/pr.d.ts +5 -0
- package/dist/commands/pr.d.ts.map +1 -1
- package/dist/commands/pr.js +51 -19
- package/dist/commands/pr.js.map +1 -1
- package/dist/compose.d.ts +72 -0
- package/dist/compose.d.ts.map +1 -0
- package/dist/compose.js +237 -0
- package/dist/compose.js.map +1 -0
- package/dist/ffmpeg.d.ts +35 -0
- package/dist/ffmpeg.d.ts.map +1 -0
- package/dist/ffmpeg.js +143 -0
- package/dist/ffmpeg.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/moments.d.ts +83 -0
- package/dist/moments.d.ts.map +1 -0
- package/dist/moments.js +170 -0
- package/dist/moments.js.map +1 -0
- package/dist/record.d.ts +69 -0
- package/dist/record.d.ts.map +1 -0
- package/dist/record.js +223 -0
- package/dist/record.js.map +1 -0
- package/dist/report.d.ts +9 -0
- package/dist/report.d.ts.map +1 -1
- package/dist/report.js +56 -3
- package/dist/report.js.map +1 -1
- package/dist/run.d.ts +2 -0
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +2 -1
- package/dist/run.js.map +1 -1
- package/dist/timeline.d.ts +46 -0
- package/dist/timeline.d.ts.map +1 -0
- package/dist/timeline.js +80 -0
- package/dist/timeline.js.map +1 -0
- package/dist/types.d.ts +34 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/video.d.ts +19 -0
- package/dist/video.d.ts.map +1 -0
- package/dist/video.js +109 -0
- package/dist/video.js.map +1 -0
- package/package.json +4 -2
- package/skill/SKILL.md +24 -5
package/README.md
CHANGED
|
@@ -74,6 +74,7 @@ see the repo can see them. Nothing is committed to your PR branch.
|
|
|
74
74
|
|---|---|
|
|
75
75
|
| [How it works](https://github.com/juangadm/pre-post/blob/main/docs/how-it-works.md) | How Pre and Post are chosen, capture, diffing, layout shifts |
|
|
76
76
|
| [GitHub Action](https://github.com/juangadm/pre-post/blob/main/docs/github-action.md) | Run on every PR with no per-person setup |
|
|
77
|
+
| [Video: Moments](https://github.com/juangadm/pre-post/blob/main/docs/video.md) | Record interactions (menus, hovers, transitions) as synced Pre \| Post clips |
|
|
77
78
|
| [Reference](https://github.com/juangadm/pre-post/blob/main/docs/reference.md) | All commands, exit codes, `.pre-post.json`, environment variables |
|
|
78
79
|
| [Screenshot storage](https://github.com/juangadm/pre-post/blob/main/docs/storage.md) | How much space it uses and how to prune it |
|
|
79
80
|
| [Contributing](https://github.com/juangadm/pre-post/blob/main/CONTRIBUTING.md) | Build and test locally |
|
|
Binary file
|
|
Binary file
|
package/dist/attach.d.ts
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Put clips where GitHub will play them.
|
|
3
|
+
*
|
|
4
|
+
* A video plays inline in a PR only from GitHub's own attachment storage
|
|
5
|
+
* (`github.com/user-attachments/assets/…`); a file on the assets branch is a
|
|
6
|
+
* download link at best. Since 2026-09-01 `gh` uploads there with `--attach`
|
|
7
|
+
* (gh 2.99+, a person's login or a classic PAT — the Actions GITHUB_TOKEN is
|
|
8
|
+
* refused), rewriting a local reference in the text it posts into the
|
|
9
|
+
* attachment URL.
|
|
10
|
+
*
|
|
11
|
+
* The description itself is written by the same code as always, so the clips
|
|
12
|
+
* are uploaded on their own first: a temporary comment carries them up, their
|
|
13
|
+
* URLs are read back, and the comment is deleted — the flow vercel-labs'
|
|
14
|
+
* before-and-after settled on. Anything that goes wrong leaves the caller to
|
|
15
|
+
* fall back to the assets branch. The cost: PR subscribers are notified of a
|
|
16
|
+
* comment that is gone by the time they look. Passing `--attach` to the
|
|
17
|
+
* description edit itself would avoid it, but the sticky-comment fallback
|
|
18
|
+
* would still need this flow.
|
|
19
|
+
*/
|
|
20
|
+
import { GitHub } from './github.js';
|
|
21
|
+
import { MomentOutcome } from './types.js';
|
|
22
|
+
/** The first gh release whose `--attach` works on PRs and comments. */
|
|
23
|
+
export declare const MIN_GH_FOR_ATTACH: readonly [2, 99, 0];
|
|
24
|
+
export declare const UPDATE_GH_HINT = "Update GitHub CLI to 2.99 or newer (https://cli.github.com, or `brew upgrade gh`) to play videos inline in the PR.";
|
|
25
|
+
/** `gh version 2.101.0 (2026-09-20)` → [2, 101, 0]. */
|
|
26
|
+
export declare function parseGhVersion(output: string): number[] | null;
|
|
27
|
+
export declare function atLeast(version: number[], min: readonly number[]): boolean;
|
|
28
|
+
/** Whether this machine's gh can attach video, and if not the sentence that fixes it. */
|
|
29
|
+
export declare function ghAttachSupport(): {
|
|
30
|
+
ok: true;
|
|
31
|
+
} | {
|
|
32
|
+
ok: false;
|
|
33
|
+
reason: string;
|
|
34
|
+
};
|
|
35
|
+
/** The attachment URLs in a comment body, in the order they appear. */
|
|
36
|
+
export declare function attachmentUrls(body: string): string[];
|
|
37
|
+
/**
|
|
38
|
+
* Upload `files` (all in one folder) as PR attachments. Returns file → URL.
|
|
39
|
+
* Throws when any of them does not come back as an attachment.
|
|
40
|
+
*/
|
|
41
|
+
export declare function uploadAttachments(gh: GitHub, ownerRepo: string, prNumber: number, files: string[], token?: string): Promise<Map<string, string>>;
|
|
42
|
+
export interface AttachOptions {
|
|
43
|
+
gh: GitHub;
|
|
44
|
+
ownerRepo: string;
|
|
45
|
+
/** No PR yet means nowhere to attach to. */
|
|
46
|
+
pr?: number;
|
|
47
|
+
token?: string;
|
|
48
|
+
log?: (msg: string) => void;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Attach recorded clips to the PR where possible, marking each one inline.
|
|
52
|
+
* Returns the clips left for the assets branch, and the one sentence that
|
|
53
|
+
* would make them play when there are any.
|
|
54
|
+
*/
|
|
55
|
+
export declare function attachClips(clips: MomentOutcome[], opts: AttachOptions): Promise<{
|
|
56
|
+
linked: MomentOutcome[];
|
|
57
|
+
hint?: string;
|
|
58
|
+
}>;
|
|
59
|
+
//# sourceMappingURL=attach.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attach.d.ts","sourceRoot":"","sources":["../src/attach.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,uEAAuE;AACvE,eAAO,MAAM,iBAAiB,qBAAsB,CAAC;AAErD,eAAO,MAAM,cAAc,uHAAuH,CAAC;AAKnJ,uDAAuD;AACvD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAG9D;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAK1E;AAED,yFAAyF;AACzF,wBAAgB,eAAe,IAAI;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAQ9E;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAErD;AAmBD;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA4B9B;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAkBlI"}
|
package/dist/attach.js
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Put clips where GitHub will play them.
|
|
3
|
+
*
|
|
4
|
+
* A video plays inline in a PR only from GitHub's own attachment storage
|
|
5
|
+
* (`github.com/user-attachments/assets/…`); a file on the assets branch is a
|
|
6
|
+
* download link at best. Since 2026-09-01 `gh` uploads there with `--attach`
|
|
7
|
+
* (gh 2.99+, a person's login or a classic PAT — the Actions GITHUB_TOKEN is
|
|
8
|
+
* refused), rewriting a local reference in the text it posts into the
|
|
9
|
+
* attachment URL.
|
|
10
|
+
*
|
|
11
|
+
* The description itself is written by the same code as always, so the clips
|
|
12
|
+
* are uploaded on their own first: a temporary comment carries them up, their
|
|
13
|
+
* URLs are read back, and the comment is deleted — the flow vercel-labs'
|
|
14
|
+
* before-and-after settled on. Anything that goes wrong leaves the caller to
|
|
15
|
+
* fall back to the assets branch. The cost: PR subscribers are notified of a
|
|
16
|
+
* comment that is gone by the time they look. Passing `--attach` to the
|
|
17
|
+
* description edit itself would avoid it, but the sticky-comment fallback
|
|
18
|
+
* would still need this flow.
|
|
19
|
+
*/
|
|
20
|
+
import fs from 'fs';
|
|
21
|
+
import os from 'os';
|
|
22
|
+
import path from 'path';
|
|
23
|
+
import { spawn, spawnSync } from 'child_process';
|
|
24
|
+
/** The first gh release whose `--attach` works on PRs and comments. */
|
|
25
|
+
export const MIN_GH_FOR_ATTACH = [2, 99, 0];
|
|
26
|
+
export const UPDATE_GH_HINT = 'Update GitHub CLI to 2.99 or newer (https://cli.github.com, or `brew upgrade gh`) to play videos inline in the PR.';
|
|
27
|
+
const ATTACHMENT_URL = /https:\/\/github\.com\/user-attachments\/assets\/[\w-]+/g;
|
|
28
|
+
const UPLOAD_MARKER = '<!-- pre-post:upload (temporary; deleted once the clips are uploaded) -->';
|
|
29
|
+
/** `gh version 2.101.0 (2026-09-20)` → [2, 101, 0]. */
|
|
30
|
+
export function parseGhVersion(output) {
|
|
31
|
+
const m = /gh version (\d+)\.(\d+)\.(\d+)/.exec(output);
|
|
32
|
+
return m ? [Number(m[1]), Number(m[2]), Number(m[3])] : null;
|
|
33
|
+
}
|
|
34
|
+
export function atLeast(version, min) {
|
|
35
|
+
for (let i = 0; i < min.length; i++) {
|
|
36
|
+
if ((version[i] ?? 0) !== min[i])
|
|
37
|
+
return (version[i] ?? 0) > min[i];
|
|
38
|
+
}
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
/** Whether this machine's gh can attach video, and if not the sentence that fixes it. */
|
|
42
|
+
export function ghAttachSupport() {
|
|
43
|
+
const probe = spawnSync('gh', ['--version'], { encoding: 'utf-8' });
|
|
44
|
+
if (probe.error || probe.status !== 0) {
|
|
45
|
+
return { ok: false, reason: 'Install GitHub CLI 2.99 or newer (https://cli.github.com) to play videos inline in the PR.' };
|
|
46
|
+
}
|
|
47
|
+
const version = parseGhVersion(probe.stdout);
|
|
48
|
+
if (!version || !atLeast(version, MIN_GH_FOR_ATTACH))
|
|
49
|
+
return { ok: false, reason: UPDATE_GH_HINT };
|
|
50
|
+
return { ok: true };
|
|
51
|
+
}
|
|
52
|
+
/** The attachment URLs in a comment body, in the order they appear. */
|
|
53
|
+
export function attachmentUrls(body) {
|
|
54
|
+
return body.match(ATTACHMENT_URL) ?? [];
|
|
55
|
+
}
|
|
56
|
+
function runGh(args, cwd, token) {
|
|
57
|
+
return new Promise((resolve, reject) => {
|
|
58
|
+
const child = spawn('gh', args, {
|
|
59
|
+
cwd,
|
|
60
|
+
// The token pre-post already uses, so gh acts as the same identity.
|
|
61
|
+
env: token ? { ...process.env, GH_TOKEN: token } : process.env,
|
|
62
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
63
|
+
});
|
|
64
|
+
let out = '';
|
|
65
|
+
let err = '';
|
|
66
|
+
child.stdout.on('data', d => { out += d; });
|
|
67
|
+
child.stderr.on('data', d => { err += d; });
|
|
68
|
+
child.on('error', reject);
|
|
69
|
+
child.on('close', code => code === 0 ? resolve(out) : reject(new Error(err.trim().split('\n').pop() || `gh exited ${code}`)));
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Upload `files` (all in one folder) as PR attachments. Returns file → URL.
|
|
74
|
+
* Throws when any of them does not come back as an attachment.
|
|
75
|
+
*/
|
|
76
|
+
export async function uploadAttachments(gh, ownerRepo, prNumber, files, token) {
|
|
77
|
+
if (!files.length)
|
|
78
|
+
return new Map();
|
|
79
|
+
const dir = path.dirname(files[0]);
|
|
80
|
+
const scratch = fs.mkdtempSync(path.join(os.tmpdir(), 'pre-post-upload-'));
|
|
81
|
+
const bodyFile = path.join(scratch, 'body.md');
|
|
82
|
+
// `--attach` rewrites references to the files it is given, resolved from
|
|
83
|
+
// gh's working directory, so both use the same relative spelling.
|
|
84
|
+
const refs = files.map(f => `./${path.basename(f)}`);
|
|
85
|
+
fs.writeFileSync(bodyFile, [UPLOAD_MARKER, '', ...refs.map(r => ``), ''].join('\n'));
|
|
86
|
+
try {
|
|
87
|
+
const out = await runGh([
|
|
88
|
+
'pr', 'comment', String(prNumber), '--repo', ownerRepo, '--body-file', bodyFile,
|
|
89
|
+
...refs.flatMap(r => ['--attach', r]),
|
|
90
|
+
], dir, token);
|
|
91
|
+
const id = /#issuecomment-(\d+)/.exec(out)?.[1];
|
|
92
|
+
if (!id)
|
|
93
|
+
throw new Error('gh did not say which comment it posted');
|
|
94
|
+
const comment = await gh.request('GET', `/repos/${ownerRepo}/issues/comments/${id}`);
|
|
95
|
+
const urls = attachmentUrls(comment.body ?? '');
|
|
96
|
+
if (urls.length !== files.length) {
|
|
97
|
+
// Kept, not deleted: the comment is the only place the uploads are listed.
|
|
98
|
+
throw new Error(`expected ${files.length} attachment(s), GitHub returned ${urls.length}`);
|
|
99
|
+
}
|
|
100
|
+
// The attachment outlives the comment that carried it up.
|
|
101
|
+
await gh.request('DELETE', `/repos/${ownerRepo}/issues/comments/${id}`).catch(() => undefined);
|
|
102
|
+
return new Map(files.map((f, i) => [f, urls[i]]));
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
fs.rmSync(scratch, { recursive: true, force: true });
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Attach recorded clips to the PR where possible, marking each one inline.
|
|
110
|
+
* Returns the clips left for the assets branch, and the one sentence that
|
|
111
|
+
* would make them play when there are any.
|
|
112
|
+
*/
|
|
113
|
+
export async function attachClips(clips, opts) {
|
|
114
|
+
const log = opts.log ?? (() => undefined);
|
|
115
|
+
if (!opts.pr)
|
|
116
|
+
return { linked: clips, hint: 'Open the PR and re-run to play the videos inline.' };
|
|
117
|
+
const support = ghAttachSupport();
|
|
118
|
+
if (!support.ok) {
|
|
119
|
+
log(`Videos will be linked, not inline: ${support.reason}`);
|
|
120
|
+
return { linked: clips, hint: support.reason };
|
|
121
|
+
}
|
|
122
|
+
try {
|
|
123
|
+
const urls = await uploadAttachments(opts.gh, opts.ownerRepo, opts.pr, clips.map(m => m.file), opts.token);
|
|
124
|
+
for (const m of clips) {
|
|
125
|
+
m.videoUrl = urls.get(m.file);
|
|
126
|
+
m.inline = true;
|
|
127
|
+
}
|
|
128
|
+
log(`Attached ${clips.length} video(s) to PR #${opts.pr}.`);
|
|
129
|
+
return { linked: [] };
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
const hint = `GitHub did not take the videos as attachments (${err instanceof Error ? err.message : err}); they are linked instead. Inline video needs gh signed in as a person or with a classic token, not the Actions GITHUB_TOKEN.`;
|
|
133
|
+
log(hint);
|
|
134
|
+
return { linked: clips, hint };
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=attach.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attach.js","sourceRoot":"","sources":["../src/attach.ts"],"names":[],"mappings":"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"}
|
package/dist/bin/cli.js
CHANGED
|
@@ -10,6 +10,7 @@ import { runDetect } from '../commands/detect.js';
|
|
|
10
10
|
import { EXIT_BROKEN_PAGE, NeedsHumanError } from '../errors.js';
|
|
11
11
|
import { buildSummary } from '../report.js';
|
|
12
12
|
import { ownVersion } from '../drift.js';
|
|
13
|
+
import { loadMomentsFile, MomentError } from '../moments.js';
|
|
13
14
|
const VERSION = ownVersion();
|
|
14
15
|
const SUBCOMMANDS = ['pr', 'detect', 'login', 'prune', 'doctor', 'compare'];
|
|
15
16
|
const argv = process.argv.slice(2);
|
|
@@ -65,6 +66,8 @@ const OPTIONS = {
|
|
|
65
66
|
output: { type: 'string', short: 'o' },
|
|
66
67
|
'dry-run': { type: 'boolean' },
|
|
67
68
|
'no-comment': { type: 'boolean' },
|
|
69
|
+
moments: { type: 'string' },
|
|
70
|
+
'no-video': { type: 'boolean' },
|
|
68
71
|
'require-pr': { type: 'boolean' },
|
|
69
72
|
local: { type: 'boolean' },
|
|
70
73
|
pr: { type: 'string' },
|
|
@@ -108,6 +111,11 @@ OPTIONS
|
|
|
108
111
|
--no-local-baseline Do not rebuild the baseline from the base commit
|
|
109
112
|
--dry-run Capture and diff only; publish nothing, leave the PR alone
|
|
110
113
|
--no-comment Publish images but leave the PR description alone
|
|
114
|
+
--moments <file> Record these interactions as Pre | Post videos
|
|
115
|
+
(JSON; default: "moments" in .pre-post.json).
|
|
116
|
+
One interaction per Moment, aim for under 15s;
|
|
117
|
+
the first 3 are recorded. See docs/video.md
|
|
118
|
+
--no-video Record no video this run
|
|
111
119
|
--require-pr Do nothing, successfully, when no open PR is found
|
|
112
120
|
--local Build both sides on this machine; ignore deployments
|
|
113
121
|
--pr <number> Target a specific PR
|
|
@@ -119,6 +127,7 @@ ENVIRONMENT
|
|
|
119
127
|
VERCEL_AUTOMATION_BYPASS_SECRET Bypass Vercel Deployment Protection
|
|
120
128
|
PRE_POST_CONCURRENCY Parallel pages (default 6)
|
|
121
129
|
PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH Use a specific Chromium binary
|
|
130
|
+
PRE_POST_FFMPEG Use a specific ffmpeg for Moments
|
|
122
131
|
`);
|
|
123
132
|
}
|
|
124
133
|
function num(v, flag) {
|
|
@@ -177,6 +186,9 @@ function output(result) {
|
|
|
177
186
|
console.log(`Files: ${result.outputDir}`);
|
|
178
187
|
if (result.sheetPath)
|
|
179
188
|
console.log(`Sheet: ${result.sheetPath}`);
|
|
189
|
+
for (const m of result.moments ?? [])
|
|
190
|
+
if (m.file)
|
|
191
|
+
console.log(`Video: ${m.file}`);
|
|
180
192
|
if (result.markdown && !result.commentUrl)
|
|
181
193
|
console.log('\n' + result.markdown);
|
|
182
194
|
}
|
|
@@ -234,6 +246,8 @@ async function main() {
|
|
|
234
246
|
requirePr: values['require-pr'],
|
|
235
247
|
local: values.local,
|
|
236
248
|
pr: num(values.pr, '--pr'),
|
|
249
|
+
moments: values.moments ? loadMomentsFile(values.moments) : undefined,
|
|
250
|
+
video: !values['no-video'],
|
|
237
251
|
version: VERSION,
|
|
238
252
|
});
|
|
239
253
|
// Nothing ran, and the log already said why; a summary of zero routes adds nothing.
|
|
@@ -307,6 +321,12 @@ main()
|
|
|
307
321
|
console.error(`\n${err.message}`);
|
|
308
322
|
process.exit(3);
|
|
309
323
|
}
|
|
324
|
+
// A Moment that does not parse is a usage error, and its message already
|
|
325
|
+
// names the Moment, the step and the fix.
|
|
326
|
+
if (err instanceof MomentError) {
|
|
327
|
+
console.error(`pre-post: ${err.message}`);
|
|
328
|
+
process.exit(2);
|
|
329
|
+
}
|
|
310
330
|
console.error(err?.stack && process.env.PRE_POST_DEBUG ? err.stack : `Error: ${err?.message || err}`);
|
|
311
331
|
process.exit(1);
|
|
312
332
|
});
|
package/dist/bin/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/browser.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* advanced by a fixed budget, reduced motion, animations finished, caret
|
|
7
7
|
* hidden, fonts and images settled, layout stable.
|
|
8
8
|
*/
|
|
9
|
-
import { Browser } from 'playwright-core';
|
|
9
|
+
import { Browser, BrowserContext, Page } from 'playwright-core';
|
|
10
10
|
import { AuthOptions, CaptureResult, PageError, ViewportSize } from './types.js';
|
|
11
11
|
/** Every capture sees the same wall clock, so dates and "x minutes ago" never drift. */
|
|
12
12
|
export declare const FIXED_TIME: Date;
|
|
@@ -44,6 +44,8 @@ export interface ScreenshotOptions {
|
|
|
44
44
|
}
|
|
45
45
|
/** Directory of the playwright-core package (for its CLI and browsers.json). */
|
|
46
46
|
export declare function playwrightCoreDir(): string;
|
|
47
|
+
/** Where Playwright keeps the browsers (and the ffmpeg) it installs. */
|
|
48
|
+
export declare function playwrightCacheDir(): string;
|
|
47
49
|
export interface LaunchOptions {
|
|
48
50
|
headless?: boolean;
|
|
49
51
|
}
|
|
@@ -73,7 +75,7 @@ export declare function proxyFromEnv(env?: NodeJS.ProcessEnv): {
|
|
|
73
75
|
* 4. System Chrome / Edge
|
|
74
76
|
*/
|
|
75
77
|
export declare function launchBrowser(opts?: LaunchOptions): Promise<Browser>;
|
|
76
|
-
export type BrowserKind = 'chromium-headless-shell' | 'chromium';
|
|
78
|
+
export type BrowserKind = 'chromium-headless-shell' | 'chromium' | 'ffmpeg';
|
|
77
79
|
/**
|
|
78
80
|
* Install a browser through playwright-core's CLI. Resolves true on success.
|
|
79
81
|
*
|
|
@@ -89,18 +91,62 @@ export declare function launchBrowserOrInstall(opts?: LaunchOptions): Promise<Br
|
|
|
89
91
|
/** The process-wide headless browser, launched (and installed) on first use. */
|
|
90
92
|
export declare function getBrowser(): Promise<Browser>;
|
|
91
93
|
export declare function browserDescription(): string;
|
|
94
|
+
/**
|
|
95
|
+
* Hide Next's dev-tools badge without hiding its error dialog.
|
|
96
|
+
*
|
|
97
|
+
* Both render into the same `nextjs-portal` shadow root — measured against
|
|
98
|
+
* Next 16.0.10, a healthy page has only `#devtools-indicator` there and a
|
|
99
|
+
* broken one adds `[data-nextjs-dialog-overlay]` beside it — so the host
|
|
100
|
+
* element cannot be used to tell them apart. Reaching into the shadow root is
|
|
101
|
+
* what lets the badge go while the dialog stays.
|
|
102
|
+
*
|
|
103
|
+
* The badge matters because on the local strategy both sides are dev servers,
|
|
104
|
+
* so it ships in every image published to the PR — something production never
|
|
105
|
+
* shows. It is position: fixed, so a layout shift moves the page under it and
|
|
106
|
+
* leaves it behind, counting as residual change the branch never made.
|
|
107
|
+
*
|
|
108
|
+
* Runs once, just before the screenshot, rather than from the init script: the
|
|
109
|
+
* portal is mounted after hydration, so there is nothing to find at document
|
|
110
|
+
* start.
|
|
111
|
+
*/
|
|
112
|
+
export declare function hideDevIndicator(page: Page): Promise<void>;
|
|
92
113
|
/** The overlay's raw strings, turned into the error a report can phrase. */
|
|
93
114
|
export declare function pageErrorFrom(raw: {
|
|
94
115
|
kind: string;
|
|
95
116
|
message?: string;
|
|
96
117
|
text?: string;
|
|
97
118
|
} | null): PageError | undefined;
|
|
119
|
+
/**
|
|
120
|
+
* Wait for everything that arrives on the *real* clock: fonts, images, the
|
|
121
|
+
* network, and the layout work that hydration does. The page's own timers stay
|
|
122
|
+
* frozen throughout, so waiting longer here — on a slow host, a cold cache, a
|
|
123
|
+
* busy machine — never advances an animation. Bounded by `timeout` ms.
|
|
124
|
+
*/
|
|
125
|
+
export declare function settlePage(page: Page, timeout: number, options?: {
|
|
126
|
+
network?: boolean;
|
|
127
|
+
}): Promise<void>;
|
|
128
|
+
/**
|
|
129
|
+
* Run `fn` on a fresh page whose clock runs in real time and whose motion
|
|
130
|
+
* preferences are left alone — what a recording needs, and the opposite of a
|
|
131
|
+
* screenshot. Shares the page pool with captures, so a run's recordings and
|
|
132
|
+
* screenshots together never open more pages than the pool allows.
|
|
133
|
+
*/
|
|
134
|
+
export declare function withMotionPage<T>(viewport: ViewportSize, auth: AuthOptions | undefined, fn: (page: Page, ctx: BrowserContext) => Promise<T>): Promise<T>;
|
|
98
135
|
/**
|
|
99
136
|
* Capture a screenshot. Safe to call concurrently — the page pool bounds parallelism.
|
|
100
137
|
* Throws HttpStatusError for 401/403 (auth required); other statuses are returned
|
|
101
138
|
* in the result so callers can decide (a 404 "before" for a new page is legitimate).
|
|
102
139
|
*/
|
|
103
140
|
export declare function captureScreenshot(url: string, options: ScreenshotOptions): Promise<CaptureResult>;
|
|
141
|
+
/**
|
|
142
|
+
* Load `url`. Throws NavigationError when no document arrives and
|
|
143
|
+
* HttpStatusError for 401/403 (auth required); any other status is returned
|
|
144
|
+
* for the caller to judge — a 404 on Pre is a legitimately new page.
|
|
145
|
+
*/
|
|
146
|
+
export declare function gotoChecked(page: Page, url: string): Promise<{
|
|
147
|
+
status?: number;
|
|
148
|
+
vercel: boolean;
|
|
149
|
+
}>;
|
|
104
150
|
/**
|
|
105
151
|
* How long a graceful browser shutdown may take before the run stops waiting.
|
|
106
152
|
*
|
package/dist/browser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAY,OAAO,
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAY,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAK1E,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAMjF,wFAAwF;AACxF,eAAO,MAAM,UAAU,MAAuC,CAAC;AAE/D;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,eAAe,OAAO,CAAC;AAqCpC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAMD,gFAAgF;AAChF,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wEAAwE;AACxE,wBAAgB,kBAAkB,IAAI,MAAM,CAQ3C;AAsDD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAWlH;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CA6C9E;AAED,MAAM,MAAM,WAAW,GAAG,yBAAyB,GAAG,UAAU,GAAG,QAAQ,CAAC;AAI5E;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAQlE;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAcvF;AAED,gFAAgF;AAChF,wBAAsB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAgBnD;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAwBD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAYhE;AA+CD,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,GAAG,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,CAQlH;AAsFD;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAchH;AAiJD;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,CAAC,EACpC,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,WAAW,GAAG,SAAS,EAC7B,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAClD,OAAO,CAAC,CAAC,CAAC,CAYZ;AAMD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CAqGvG;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CAQxG;AAUD;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB,OAAQ,CAAC;AAE9C;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAOlD"}
|
package/dist/browser.js
CHANGED
|
@@ -71,17 +71,21 @@ function releaseSlot() {
|
|
|
71
71
|
export function playwrightCoreDir() {
|
|
72
72
|
return path.dirname(require.resolve('playwright-core/package.json'));
|
|
73
73
|
}
|
|
74
|
-
/**
|
|
75
|
-
|
|
76
|
-
*/
|
|
77
|
-
function findCachedChromium() {
|
|
74
|
+
/** Where Playwright keeps the browsers (and the ffmpeg) it installs. */
|
|
75
|
+
export function playwrightCacheDir() {
|
|
78
76
|
const home = process.env.HOME || process.env.USERPROFILE || '';
|
|
79
|
-
|
|
77
|
+
return process.env.PLAYWRIGHT_BROWSERS_PATH
|
|
80
78
|
|| (process.platform === 'darwin'
|
|
81
79
|
? path.join(home, 'Library', 'Caches', 'ms-playwright')
|
|
82
80
|
: process.platform === 'win32'
|
|
83
81
|
? path.join(process.env.LOCALAPPDATA || path.join(home, 'AppData', 'Local'), 'ms-playwright')
|
|
84
82
|
: path.join(home, '.cache', 'ms-playwright'));
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Scan Playwright's browser cache for installed Chromium executables.
|
|
86
|
+
*/
|
|
87
|
+
function findCachedChromium() {
|
|
88
|
+
const cacheDir = playwrightCacheDir();
|
|
85
89
|
let entries;
|
|
86
90
|
try {
|
|
87
91
|
entries = fs.readdirSync(cacheDir);
|
|
@@ -205,6 +209,7 @@ export async function launchBrowser(opts = {}) {
|
|
|
205
209
|
}
|
|
206
210
|
throw new BrowserNotFoundError(lastError);
|
|
207
211
|
}
|
|
212
|
+
const INSTALL_SIZE_MB = { 'chromium-headless-shell': 80, chromium: 170, ffmpeg: 2 };
|
|
208
213
|
/**
|
|
209
214
|
* Install a browser through playwright-core's CLI. Resolves true on success.
|
|
210
215
|
*
|
|
@@ -213,7 +218,7 @@ export async function launchBrowser(opts = {}) {
|
|
|
213
218
|
*/
|
|
214
219
|
export function installBrowser(kind) {
|
|
215
220
|
const cli = path.join(playwrightCoreDir(), 'cli.js');
|
|
216
|
-
console.error(`Installing ${kind} (one-time, ~${kind
|
|
221
|
+
console.error(`Installing ${kind} (one-time, ~${INSTALL_SIZE_MB[kind]} MB)...`);
|
|
217
222
|
return new Promise(resolve => {
|
|
218
223
|
const child = spawn(process.execPath, [cli, 'install', kind], { stdio: ['ignore', 'inherit', 'inherit'] });
|
|
219
224
|
child.on('error', () => resolve(false));
|
|
@@ -304,7 +309,7 @@ const DEV_OVERLAY_SELECTORS = [
|
|
|
304
309
|
* portal is mounted after hydration, so there is nothing to find at document
|
|
305
310
|
* start.
|
|
306
311
|
*/
|
|
307
|
-
async function hideDevIndicator(page) {
|
|
312
|
+
export async function hideDevIndicator(page) {
|
|
308
313
|
await page.evaluate(() => {
|
|
309
314
|
const hosts = Array.prototype.slice.call(document.querySelectorAll('nextjs-portal'));
|
|
310
315
|
for (const host of hosts) {
|
|
@@ -394,23 +399,13 @@ const INIT_SCRIPT = `
|
|
|
394
399
|
if (document.head) attach(); else document.addEventListener('DOMContentLoaded', attach, { once: true });
|
|
395
400
|
})();
|
|
396
401
|
`;
|
|
397
|
-
|
|
398
|
-
* A context per capture, not per viewport.
|
|
399
|
-
*
|
|
400
|
-
* Playwright's clock belongs to the browser context and is replayed into every
|
|
401
|
-
* page opened in it, so pages that share a context do not share a starting
|
|
402
|
-
* point: the second page inherits the timeline the first one ran. An animated
|
|
403
|
-
* page then lands on a different frame depending on how many captures came
|
|
404
|
-
* before it. One context per capture makes every page start from the same
|
|
405
|
-
* paused instant — and keeps storage and caches from leaking between the two
|
|
406
|
-
* sides of a comparison.
|
|
407
|
-
*/
|
|
408
|
-
async function createContext(viewport, scale, auth) {
|
|
402
|
+
async function createContext(viewport, scale, { auth, motion = false } = {}) {
|
|
409
403
|
const b = await getBrowser();
|
|
410
404
|
const ctx = await b.newContext({
|
|
411
405
|
viewport,
|
|
412
406
|
deviceScaleFactor: scale,
|
|
413
|
-
|
|
407
|
+
// A recording exists to show motion, so it asks for the page's own.
|
|
408
|
+
reducedMotion: motion ? 'no-preference' : 'reduce',
|
|
414
409
|
colorScheme: 'light',
|
|
415
410
|
locale: 'en-US',
|
|
416
411
|
timezoneId: 'UTC',
|
|
@@ -425,8 +420,13 @@ async function createContext(viewport, scale, auth) {
|
|
|
425
420
|
// land on whatever frame the network happened to deliver. With the clock
|
|
426
421
|
// installed and paused, the page's timeline does not move until
|
|
427
422
|
// `advanceTimeline` moves it — by the same amount on both sides.
|
|
428
|
-
|
|
429
|
-
|
|
423
|
+
//
|
|
424
|
+
// A recording runs on the real clock instead: its whole point is time
|
|
425
|
+
// passing, and CSS transitions follow the compositor, not these timers.
|
|
426
|
+
if (!motion) {
|
|
427
|
+
await ctx.clock.install({ time: FIXED_TIME });
|
|
428
|
+
await ctx.clock.pauseAt(FIXED_TIME);
|
|
429
|
+
}
|
|
430
430
|
await ctx.addInitScript(INIT_SCRIPT);
|
|
431
431
|
if (auth?.cookies?.length) {
|
|
432
432
|
await ctx.addCookies(auth.cookies.map(c => ({
|
|
@@ -448,7 +448,7 @@ async function createContext(viewport, scale, auth) {
|
|
|
448
448
|
* frozen throughout, so waiting longer here — on a slow host, a cold cache, a
|
|
449
449
|
* busy machine — never advances an animation. Bounded by `timeout` ms.
|
|
450
450
|
*/
|
|
451
|
-
async function settlePage(page, timeout, options = {}) {
|
|
451
|
+
export async function settlePage(page, timeout, options = {}) {
|
|
452
452
|
const deadline = Date.now() + timeout;
|
|
453
453
|
const left = () => Math.max(0, deadline - Date.now());
|
|
454
454
|
// Fonts and images resolve off the loading pipeline, not off page timers.
|
|
@@ -605,6 +605,26 @@ async function primeLazyContent(page, maxHeight) {
|
|
|
605
605
|
await page.evaluate(() => window.scrollTo(0, 0));
|
|
606
606
|
await advanceTimeline(page, FRAME_MS);
|
|
607
607
|
}
|
|
608
|
+
/**
|
|
609
|
+
* Run `fn` on a fresh page whose clock runs in real time and whose motion
|
|
610
|
+
* preferences are left alone — what a recording needs, and the opposite of a
|
|
611
|
+
* screenshot. Shares the page pool with captures, so a run's recordings and
|
|
612
|
+
* screenshots together never open more pages than the pool allows.
|
|
613
|
+
*/
|
|
614
|
+
export async function withMotionPage(viewport, auth, fn) {
|
|
615
|
+
await acquireSlot();
|
|
616
|
+
let ctx;
|
|
617
|
+
try {
|
|
618
|
+
ctx = await createContext(viewport, 1, { auth, motion: true });
|
|
619
|
+
const page = await ctx.newPage();
|
|
620
|
+
trackRequests(page);
|
|
621
|
+
return await fn(page, ctx);
|
|
622
|
+
}
|
|
623
|
+
finally {
|
|
624
|
+
await ctx?.close().catch(() => undefined);
|
|
625
|
+
releaseSlot();
|
|
626
|
+
}
|
|
627
|
+
}
|
|
608
628
|
// ============================================================
|
|
609
629
|
// Capture
|
|
610
630
|
// ============================================================
|
|
@@ -625,16 +645,10 @@ export async function captureScreenshot(url, options) {
|
|
|
625
645
|
let ctx;
|
|
626
646
|
let page;
|
|
627
647
|
try {
|
|
628
|
-
ctx = await createContext(options.viewport, scale, options.auth);
|
|
648
|
+
ctx = await createContext(options.viewport, scale, { auth: options.auth });
|
|
629
649
|
page = await ctx.newPage();
|
|
630
650
|
trackRequests(page);
|
|
631
|
-
const
|
|
632
|
-
throw new NavigationError(classifyNavigationError(err), url, err);
|
|
633
|
-
});
|
|
634
|
-
const status = response?.status();
|
|
635
|
-
const vercel = response ? isVercelResponse({ get: n => response.headers()[n] ?? null }) : false;
|
|
636
|
-
if (status === 401 || status === 403)
|
|
637
|
-
throw new HttpStatusError(status, url, vercel);
|
|
651
|
+
const { status, vercel } = await gotoChecked(page, url);
|
|
638
652
|
await settlePage(page, settleTimeout);
|
|
639
653
|
if (options.fullPage) {
|
|
640
654
|
await primeLazyContent(page, maxHeight);
|
|
@@ -712,6 +726,21 @@ export async function captureScreenshot(url, options) {
|
|
|
712
726
|
releaseSlot();
|
|
713
727
|
}
|
|
714
728
|
}
|
|
729
|
+
/**
|
|
730
|
+
* Load `url`. Throws NavigationError when no document arrives and
|
|
731
|
+
* HttpStatusError for 401/403 (auth required); any other status is returned
|
|
732
|
+
* for the caller to judge — a 404 on Pre is a legitimately new page.
|
|
733
|
+
*/
|
|
734
|
+
export async function gotoChecked(page, url) {
|
|
735
|
+
const response = await page.goto(url, { waitUntil: 'domcontentloaded' }).catch(err => {
|
|
736
|
+
throw new NavigationError(classifyNavigationError(err), url, err);
|
|
737
|
+
});
|
|
738
|
+
const status = response?.status();
|
|
739
|
+
const vercel = response ? isVercelResponse({ get: n => response.headers()[n] ?? null }) : false;
|
|
740
|
+
if (status === 401 || status === 403)
|
|
741
|
+
throw new HttpStatusError(status, url, vercel);
|
|
742
|
+
return { status, vercel };
|
|
743
|
+
}
|
|
715
744
|
function classifyNavigationError(err) {
|
|
716
745
|
const msg = err.message || '';
|
|
717
746
|
if (err.name === 'TimeoutError' || /Timeout .* exceeded/.test(msg))
|